ローコストでつくる discord bot
ローコストでつくる discord bot
スプラトゥーン3まわりでやってる人が多くて、いろんなクラスタの人たちと遊べて楽しい ゲームのウデマエの方はてんでなんだけど集まってワイワイゲームするのがシンプルに楽しいので、エンジョイな人たちとスムーズ楽しめるようになんらかのサポートツールを作ってみようかなと
...というのは建前で、discord の新しい API を触ってみたかったのでいろいろ試してみたの巻 discord のこれまでの bot は listen するサーバがどっかに常時建ってないといけないので面倒だったが、ある程度妥協すれば bot っぽいものを作れるようになっていた
アプリケーションを作成して、OAuth2 URL Generator から applications.commands にだけチェックをいれた URL を作成して admin の権限をもってるサーバに放り込む
https://gyazo.com/c66143c4f15f23c7f97c845163ee528e
アプリケーションの intersection の endpoint の登録をすると ping が飛んでくるので pong してやらないと登録されなかった
deno deploy の env に discord の public key を登録しておく
グローバルに登録ということもできるらしいが、時間がかかったりすることもあるらしい
すると、メッセージのところで右クリックした際に アプリ ってセクションのところに任意のコマンドを生やすことができる
https://gyazo.com/9f7edbceb740a67081cdff67d456b466
今回は各種バトルの今と次のマップを返すコマンドをつくる
まずはコマンドが実行されたらレスポンスを返す部分で
ApplicationCommand = 2 でリクエストが飛んでくるので適切な json を返してやるとそれがメッセージとして表示される仕組み
https://gyazo.com/e8f48b3b3a3011b8adef302105970b0f
なるほどね
レスポンスに components ってのをつけてやるとボタンやセレクトメニュー、テキスト入力なんかを返せる
https://gyazo.com/8bff2fe0bd21d264bb01b61a88deccf8
ので、最初は select を2つ返してそれぞれほしい組み合わせを選ぶ式にしてみたが、interaction として返ってくるのは選択されたソレだけなので選択されてない方が何選択されているのかがわからない
どうにかできないものかと調べてみたのだが、調べた限りでは intersection を cache として保存しておいて時限で突合するみたいな仕組みだったのでなんだかなと
https://gyazo.com/576a23f98b9f9cdc174fc2abecf6e1ae
まあボタン6コなら許容だろう...
各ボタンに custom_id を指定しておいて、それを基に spla3 API を叩いて情報を返す
レスポンスには embeds というフィールドがあって、ここに画像やらなんやら仕込める
https://gyazo.com/7fdbe7d5db96cb3c302579f1a3cd5434
イイ感じ
ちなみに地図情報は手作業で登録していってここが一番だるかった10マップx5ルールである...
でも毎回右クリックして実行するのもだるいなということに気付いたので
https://gyazo.com/eba714e7c00d3f526be57861eb69ea12
レスポンスには components も同居できるのでアンサーにもボタンを仕込んでやれば(これも midjourney 方式)楽チンになった